package com.li.onjava8.concurrent.under.atomic;

/**
 * Atomicity.test() 方法还是出现有非偶数的失败。尽管，返回 i 变量确实是原子操作，但是同
 * 步缺失允许了在对象处于不稳定的中间状态时读取值。最重要的是，由于 i 也不是 volatile 变量，所以
 * 存在可见性问题。
 */
public class UnsafeReturn extends IntTestable{
    private int i = 0;

    @Override
    void eventIncrement() {
        i++;
        i++;
    }

    @Override
    public int getAsInt() {
        return i;
    }

    public static void main(String[] args) {
        Atomicity.test(new UnsafeReturn());
    }
}
